#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
//class A
//{
//public:
//
//    virtual void f()
//
//    {
//
//        cout << "A::f()" << endl;
//
//    }
//
//};
//
//class B : public A
//{
//private:
//
//    virtual void f()
//
//    {
//
//        cout << "B::f()" << endl;
//
//    }
//
//};
//int main()
//{
//    A* pa = (A*)new B;
//
//    pa->f();
//}

//class A
//{
//public:
//
//    A() :m_iVal(0) { test(); }
//
//    virtual void func() { std::cout << m_iVal << " "; }
//
//    void test() { func(); }
//
//public:
//    int m_iVal;
//};
//
//
//
//class B : public A
//{
//public:
//    B() { test(); }
//
//    virtual void func()
//
//    {
//        ++m_iVal;
//
//        std::cout << m_iVal << " ";
//
//    }
//};
//
//int main(int argc, char* argv[])
//
//{
//
//    A* p = new B;
//
//    p->test();
//
//    return 0;
//
//}



class A {
public:
	virtual void func1()
	{
		cout << "func1" << " ";
	}
	virtual void func2()
	{
		cout << "func2" << " ";
	}
	void func3()
	{
		cout << "func3" << " ";
	}
};

class B {
public:
	virtual void func1()
	{
		cout << "func4" << " ";
	}
	virtual void func2()
	{
		cout << "func5" << " ";
	}
	void func3()
	{
		cout << "func6" << " ";
	}
};

class C : public B, public A{
public:
	virtual void func1()
	{
		cout << "func7" << " ";
	}
	virtual void func2()
	{
		cout << "func8" << " ";
	}
	virtual void func3()
	{
		cout << "func9" << " ";
	}
};
int main()
{
	A a;
	B b;
	C c;

	return 0;
}